검색 증강 생성(RAG) 소개
검색 증강 생성(RAG)은 단일 프롬프트에 담기에 너무 큰 대용량 문서를 다룰 수 있도록 도와주는 기술입니다. 모든 내용을 하나의 거대한 프롬프트에 억지로 넣는 대신, RAG는 문서를 청크(chunk)로 분할하고 질문에 답할 때 가장 관련성 높은 부분만 포함합니다.
대용량 문서의 문제점
800페이지 분량의 재무 문서가 있고 "이 회사의 위험 요소는 무엇인가요?"와 같은 특정 질문을 Claude에게 하고 싶다고 상상해 보세요. 문서에서 관련 정보를 어떻게든 Claude에게 전달해야 하지만, 프롬프트에 포함할 수 있는 텍스트의 양에는 한계가 있습니다.
방법 1: 프롬프트에 모든 내용 포함하기
첫 번째 방법은 간단합니다. 문서에서 모든 텍스트를 추출하여 사용자의 질문과 함께 프롬프트에 넣는 것입니다. 프롬프트는 다음과 같은 형태가 될 수 있습니다:
Answer the user's question about the financial document.
<user_question>
{user_question}
</user_question>
<financial_document>
{financial_document}
</financial_document>
이 방법에는 심각한 한계가 있습니다:
- 프롬프트 길이에 엄격한 제한이 있어 문서가 너무 길 수 있습니다
- 매우 긴 프롬프트에서는 Claude의 효과가 떨어집니다
- 프롬프트가 클수록 처리 비용이 더 많이 듭니다
- 프롬프트가 클수록 처리 시간이 더 오래 걸립니다
방법 2: 문서를 청크로 분할하기
RAG는 더 스마트한 접근 방식을 취합니다. 먼저 전처리 단계에서 문서를 더 작은 청크로 분할합니다. 그런 다음 사용자가 질문을 하면 질문과 가장 관련성 높은 청크를 찾아 프롬프트에 해당 청크만 포함합니다.
작동 방식은 다음과 같습니다: 누군가 "이 회사가 직면한 위험은 무엇인가요?"라고 물으면, 청크를 검색하여 "위험 요소" 섹션을 찾아 해당 관련 청크만 프롬프트에 포함합니다.
RAG의 장점
- Claude가 가장 관련성 높은 콘텐츠에만 집중할 수 있습니다
- 매우 큰 문서까지 확장 가능합니다
- 여러 문서와 함께 사용할 수 있습니다
- 더 작은 프롬프트는 비용이 적게 들고 더 빠르게 실행됩니다
RAG의 과제
- 문서를 청크로 나누는 전처리 단계가 필요합니다
- "관련" 청크를 찾기 위한 검색 메커니즘이 필요합니다
- 포함된 청크에 Claude가 필요로 하는 모든 컨텍스트가 없을 수 있습니다
- 텍스트를 청크로 나누는 방법이 다양합니다 - 어떤 방법이 가장 좋을까요?
예를 들어, 문서를 동일한 크기의 부분으로 나눌 수도 있고, 헤더와 섹션 같은 문서 구조에 따라 청크를 만들 수도 있습니다. 각 방법에는 특정 사용 사례에 맞게 평가해야 할 장단점이 있습니다.
RAG를 사용해야 할 때
RAG는 많은 기술적 결정을 수반하며 단순히 프롬프트에 모든 것을 포함하는 것보다 더 많은 작업이 필요합니다. 특정 애플리케이션에서 이점이 복잡성을 능가하는지 분석해야 합니다. 매우 큰 문서, 여러 문서를 다루거나 비용과 성능을 최적화해야 할 때 특히 유용합니다.
핵심 통찰은 RAG가 단순성을 확장성과 효율성으로 교환한다는 것입니다. 올바르게 구현하려면 더 많은 초기 작업이 필요하지만, 단순한 프롬프트 채우기로는 처리할 수 없는 문서 컬렉션을 다룰 수 있게 해줍니다.
